package com.winhxd.b2c.system.dao;

import com.github.pagehelper.Page;
import com.winhxd.b2c.common.domain.system.user.condition.CheckUserCondition;
import com.winhxd.b2c.common.domain.system.user.condition.ResetPasswordCondition;
import com.winhxd.b2c.common.domain.system.user.condition.SysUserCondition;
import com.winhxd.b2c.common.domain.system.user.condition.SysUserResetPasswordCondition;
import com.winhxd.b2c.common.domain.system.user.model.SysUser;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public interface SysUserMapper {
    /**
     * 插入新用户
     * @param record
     * @return
     */
    int insertSelective(SysUser record);

    /**
     * 根据条件查询用户列表
     * @param condition
     * @return
     */
    Page<SysUser> selectSysUser(SysUserCondition condition);

    /**
     * 根据主键查询用户
     * @param id
     * @return
     */
    SysUser selectByPrimaryKey(Long id);

    /**
     * 更新用户
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(SysUser record);

    /**
     * 根据账号查询用户
     * @param account
     * @return
     */
    SysUser getByAccount(@Param("account") String account);

    /**
     * 根据账号更新密码
     *
     * @param sysUserResetPasswordCondition
     * @return
     */
    int updatePasswordByAccount(SysUserResetPasswordCondition sysUserResetPasswordCondition);

    /* *
     *根据部门,查找所属用户
     * @author shumin
     * @date  2019/1/7 0007 17:09
    */
    int countUserByOrgId(Long id);

    /** 根据CustomerId查询用户
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    SysUser getSysUserByCondition(CheckUserCondition condition);

    /** 根据部门id查询用户 - 分页
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    List<SysUser> selectUserPageListByOrgId(Long orgId);

    /** 校验手机号是否存再
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    int countUserByMobile(String mobile);

    /** 校验账号是否存在
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    int countUserByAccount(String account);

    /** 查询除该用户以外, 还有没有其他人使用该手机号
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    int countCheckMobileNumber(@Param("id") Long id, @Param("mobile") String mobile);



    /** 根据parendID查询某个一级分销商下面有多少二级分销商
     * @author Wwangzekun
     * @Description
     * @date
     * @param
     * @return
     */
    int countDistributorByParentId(@Param("parentId") Long parentId);

    /** 根据customerId修改用户手机号
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    int updateMobileByCustomerId(@Param("customerId") Long customerId, @Param("mobile") String mobile);

    /** 修改密码
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    int updateUserPasswordById(ResetPasswordCondition condition);

    /** 利用CustomerId去修改密码
     * @author ghf
     * @Description
     * @date
     * @param
     * @return
     */
    int updatePasswordByCustomerId(ResetPasswordCondition condition);

    /**
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    int countCheckAccount(@Param("id") Long id,  @Param("account") String account);

    /** 修改该parentId下, 所有的部门
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    int updateOrgByParentId(@Param("id") Long id, @Param("orgId") Long orgId);

    /** 根据一个值来查询账号或密码是否存在用户数据
     * @author ghf
     * @Description
     * @date
     * @param
     * @return
     */
    List<SysUser> selectUserListByCondition(CheckUserCondition condition);
}